package main

import (
	"fmt"
	"log"

	"backend/api"
	"backend/config"
	"backend/model"
	"backend/repository"
	"backend/service"

	"github.com/gin-gonic/gin"
	"gorm.io/driver/mysql"
	"gorm.io/gorm"
)

func main() {
	// 加载配置
	cfg := config.LoadConfig()

	// 打印数据库配置信息进行验证
	fmt.Printf("数据库配置: %s:%s@%s:%s/%s\n",
		cfg.Database.User,
		cfg.Database.Password,
		cfg.Database.Host,
		cfg.Database.Port,
		cfg.Database.DBName)

	// 初始化数据库连接
	db, err := gorm.Open(mysql.Open(cfg.Database.DSN()), &gorm.Config{})
	if err != nil {
		log.Fatalf("无法连接到数据库: %v", err)
	}

	// 自动迁移数据库结构
	log.Println("正在检查数据库表结构...")
	if err := db.AutoMigrate(&model.User{}); err != nil {
		log.Fatalf("数据库迁移失败: %v", err)
	}
	log.Println("数据库表结构已更新")

	// 初始化存储库
	userRepo := repository.NewUserRepository(db)

	// 初始化服务
	authService := service.NewAuthService(userRepo, cfg.JWT.Secret)

	// 初始化API处理器
	authHandler := api.NewAuthHandler(authService)

	// 设置Gin路由器
	router := gin.Default()

	// 注册API路由
	authHandler.RegisterRoutes(router)

	// 启动服务器
	log.Printf("服务器启动在端口 %s...\n", cfg.Server.Port)
	if err := router.Run(":" + cfg.Server.Port); err != nil {
		log.Fatalf("无法启动服务器: %v", err)
	}
}
